package 递归;

import javax.swing.plaf.basic.BasicInternalFrameTitlePane;

public class Queen8 {
    // 定义max表示有几个皇后
    static int max = 8;
    // 记录位置
    static int [] arr = new int[max];
    static int size = 0;

    public static void main(String[] args) {
        check(0);
        System.out.println(size);
    }

    // 编写方法,放置第n个元素
    public static void check(int n){
        if(n == max){// n == 8 表示第九个皇后
            print();
            size++;
            return;
        }
        // 依次放入皇后,并判断是否冲突
        for (int i = 0; i < max; i++) {
            // 把当前的皇后,放置到第一列
            arr[n] = i;
            // 判断是否冲突
            if(judge(n)){
                check(n+1);
            }

            // 如果冲突后移一个位置
        }
    }

    // 判断当放置第n个位置时,是否和之前摆放的位置冲突
    public static boolean judge(int n){// 第n个皇后
        for (int i = 0; i < n; i++) {
            /*
            * arr[n] == arr[i] 表示在同一列
            *
            * Math.abs(n-i) == Math.abs(arr[n]-arr[i]) 表示在同一斜线
            * */
            if(arr[n] == arr[i] || Math.abs(n-i) == Math.abs(arr[n]-arr[i])){
                return false;
            }
        }
        return true;
    }

    // 输出摆放位置
    public static void print(){
        for (int i = 0; i < max; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
}
